package cn.iocoder.yudao.module.reading.util;

import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.reading.dal.dataobject.community.CommunityCommentDO;
import cn.iocoder.yudao.module.reading.dal.dataobject.community.CommunityPostDO;

import java.util.Objects;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.*;
import static cn.iocoder.yudao.module.reading.enums.ErrorCodeConstants.*;

/**
 * 社区权限验证工具类
 *
 * @author 芋道源码
 */
public class CommunityPermissionUtils {

    /**
     * 验证用户是否已登录
     *
     * @return 当前登录用户ID
     */
    public static Long validateLogin() {
        Long userId = SecurityFrameworkUtils.getLoginUserId();
        if (userId == null) {
            throw exception(UNAUTHORIZED);
        }
        return userId;
    }

    /**
     * 验证用户是否有权限操作帖子
     *
     * @param post 帖子对象
     * @param userId 当前用户ID
     */
    public static void validatePostPermission(CommunityPostDO post, Long userId) {
        if (post == null) {
            throw exception(COMMUNITY_POST_NOT_EXISTS);
        }
        
        if (!Objects.equals(post.getUserId(), userId)) {
            throw exception(COMMUNITY_POST_PERMISSION_DENIED);
        }
    }

    /**
     * 验证用户是否有权限操作评论
     *
     * @param comment 评论对象
     * @param userId 当前用户ID
     */
    public static void validateCommentPermission(CommunityCommentDO comment, Long userId) {
        if (comment == null) {
            throw exception(COMMUNITY_COMMENT_NOT_EXISTS);
        }
        
        if (!Objects.equals(comment.getUserId(), userId)) {
            throw exception(COMMUNITY_COMMENT_PERMISSION_DENIED);
        }
    }

    /**
     * 验证帖子是否存在且状态正常
     *
     * @param post 帖子对象
     */
    public static void validatePostExists(CommunityPostDO post) {
        if (post == null) {
            throw exception(COMMUNITY_POST_NOT_EXISTS);
        }
        
        if (post.getStatus() != 1) {
            throw exception(COMMUNITY_POST_NOT_EXISTS);
        }
    }

    /**
     * 验证评论是否存在且状态正常
     *
     * @param comment 评论对象
     */
    public static void validateCommentExists(CommunityCommentDO comment) {
        if (comment == null) {
            throw exception(COMMUNITY_COMMENT_NOT_EXISTS);
        }
        
        if (comment.getStatus() != 1) {
            throw exception(COMMUNITY_COMMENT_NOT_EXISTS);
        }
    }

    /**
     * 验证内容长度
     *
     * @param content 内容
     * @param maxLength 最大长度
     * @param fieldName 字段名称
     */
    public static void validateContentLength(String content, int maxLength, String fieldName) {
        if (content != null && content.length() > maxLength) {
            throw exception(BAD_REQUEST, String.format("%s长度不能超过%d个字符", fieldName, maxLength));
        }
    }

    /**
     * 验证图片数量
     *
     * @param imageCount 图片数量
     * @param maxCount 最大数量
     */
    public static void validateImageCount(int imageCount, int maxCount) {
        if (imageCount > maxCount) {
            throw exception(BAD_REQUEST, String.format("最多只能上传%d张图片", maxCount));
        }
    }

}
